<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/2/26
 * Time: 11:52
 */
namespace app\api\controller;
use app\common\controller\HomeBase;
use app\api\controller\Elf;
use think\View;
use think\Request;
use think\Controller;
use app\common\model\Aiusers as AiuserModel;
use app\common\model\Zzzailogs as AilogsModel;
use app\common\model\Aimsgrules as AimsgrulesModel;
use app\common\model\Aimsgs as AimsgsModel;
use app\common\model\Aitalk as AitalkModel;
use app\common\model\Aiusersinfo as AiuserinfoModel;


class Article extends Elf{

    private $_aiuser_model;
    private $_ailogs_model;
    private $_aimsgrules_model;
    private $_aimsgs_model;
    private $_aitalk_model;
    private $_aiuserinfo_model;
    public function _initialize()
    {
        /* * 用户表 * */
        $this->_aiuser_model = new AiuserModel();
        /* * 聊天话术 * */
        $this->_aimsgrules_model = new AimsgrulesModel();
        /* * 聊天记录 * */
        $this->_aimsgs_model = new AimsgsModel();
        /* * 聊天匹配key => value * */
        $this->_aitalk_model = new AitalkModel();
        /* * 用户画像记录表 * */
        $this->_aiuserinfo_model = new AiuserinfoModel();
        /* * 日志记录 * */
        $this->_ailogs_model = new AilogsModel();
    }

    // 用户信息采集

    public function talk(){
        $reply_msg = '';
        if (Request::instance()->isPost()) {
            $request = Request::instance()->post();
            $request['typeid'] = 1;
            //1 判断用户是否存在
            $user_info = self::has_user($request['id']);
            if($user_info){
                // 老用户, 二次聊天
            }else{
                // 新用户注册
                $new_user = self::create_user($request);
                // 发送用户注册日志
                $log_data = [
                    'user_sign' => $request['id'], 'log' => '新用户注册'
                ];
                if($new_user) self::zzzlogs($log_data);
                // 发送消息给客户
                $reply_msg = ['typeid'=>$request['typeid'],'msgtype'=>0,'msgsign'=>'msgfirst'];
            }


        }else{
//            echo '消息测试接口';
            $reply_msg = '消息测试接口';
        }
//        return json($reply_msg);
    }

// --------------------------------------------------- 需要的方法(勿删) start-------------------------------------//

    /*
     * 采集用户信息
     * */
    public function full_userinfo($user_id,$data=[]){
        $full_user = $this->_aiuserinfo_model->where('user_id',$user_id)->update($data);
        return $full_user;
    }
    /*
     * 根据消息类型,查找回复
     * */
    private function check_reply($typeid=1,$msgtype=0){
        $msgrules = ['typeid'=>$typeid,'msgtype'=>$msgtype];
        $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();
        return $msg_reply;
//        $reply_msg = $msg_reply[0]['msgsecond'];
    }

    /*
     * 查询用户画像状态 status  user_id
     * */
    private function check_status($user_id){
        $user_status = $this->_aiuserinfo_model->where(['user_id'=>$user_id])->select();
        return $user_status;
//        dump($user_status['isclient']);  int 1
    }

   /*
    * 更新用户聊天时间
    * */
    private function update_chat_time($user_id=0){
        if($user_id){
            // $result = $this->jump_img_model->where('id',$id)->update($img_data);
            $up_chat = $this->_aiuser_model->where('user_id',$user_id)->update(['last_time'=>time()]);
            return $up_chat;
        }
    }

    /*
     * 记录客户意向信息 传入参数  user_id   isclient
     * 1 检测用户画像是否存在   self::check_userinfo($has_socketid[0]['user_id']);
     * */
    private function record_client($data=[]){
       // 1 判断用户画像是否存在
        // 用户已经存在,调用存在的用户数据  查看是否存在用户画像 userinfo
        $has_userinfo = self::check_userinfo($data['user_id']);
        $uinfo_data = [];
        if($has_userinfo){
            $uinfo_data[ 'isclient' ] = $data['isclient'] ;
            // 用户画像已经存在, 可以直接修改, 修改 isclient =1 是意向客户
        }else{
            $uinfo_data[ 'user_id' ] = $data['user_id'] ;
            $uinfo_data[ 'isclient' ] = $data['isclient'] ;
            // 用户画像不存在, 需要修改的时候同时创建  修改 isclient =1 是意向客户
        }
        $uinfo_data['user_id'] = $data['user_id'];
        // 2 创建或者修改用户画像
        $write_userinfo = $this->_aiuserinfo_model->save($uinfo_data);
        return $write_userinfo;
//        dump($write_userinfo);
    }

    /*
     * 验证回复肯定和否定
     * */
    private function check_answer($answer='是'){
        // 匹配用户回复的前1个字符
        $search_key = ['key'=>$answer, 'keytarget'=>2];
        // 匹配否定的回答
        $check_answer = $this->_aitalk_model->where($search_key)->select();
        if($check_answer){
            return false;
        }else{
            return true;
        }
    }

    /*
     * 判断用户画像数据库里面, 用户数据是否存在, 不存在就创建
     * */
    private function check_userinfo($user_id){
        $has_info =  $this->_aiuserinfo_model->where(['user_id'=> $user_id])->select();
        if($has_info){
            // 存在, 可以直接修改
            return true;
        }else{
            // 不存在, 需要创建
            return false;
        }
    }
// --------------------------------------------------- 需要的方法(勿删) end--------------------------------------//

// 用户信息采集
    public function talk0914finishfirst(){
        // post  id->socketid  msg
        $reply_msg = '';
        if (Request::instance()->isPost()){
            $request = Request::instance()->post();
            // 1 判断id是否存在  ->where(['id'=>$id])->select();
            $has_socketid = $this->_aiuser_model->where(['socketid'=>$request['id']])->select();
            $ai_data = [];
            if($has_socketid){
                // 用户已经存在,调用存在的用户数据  查看是否存在用户画像 userinfo
                $has_userinfo = self::check_userinfo($has_socketid[0]['user_id']);

                $ai_data['last_time'] = time();
                // 查询聊天数据, 最近的一次聊天时间 和 最开始的聊天时间
                // 获取聊天数据, 比对聊天反馈
                $check_answer = self::check_answer($request['msg']);

                if($check_answer){
                    $uinfo_data = [  ];

                    if($has_userinfo){
                        $uinfo_data[ 'isclient' ] = 1 ;
                        // 用户画像已经存在, 可以直接修改, 修改 isclient =1 是意向客户
                    }else{
                        $uinfo_data[ 'user_id' ] = $has_socketid[0]['user_id'] ;
                        $uinfo_data[ 'isclient' ] = 1 ;
                        // 用户画像不存在, 需要修改的时候同时创建  修改 isclient =1 是意向客户
                    }

                    $write_userinfo = $this->_aiuserinfo_model->save($uinfo_data);

                    // 找到了对应的回答, 判断是肯定的回答, 就继续返回问问题, 并记录到用户画像里面
                    $msgrules = ['typeid'=>1];
                    $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();
                    $reply_msg = $msg_reply[0]['msgsecond'];
                }else{
                    // 找不到对应的回复, 直接回复疑问, 然后继续采集问题
                    $reply_msg = '不是来咨询的, 那你是来撩我的咯';
                    // 写入非意向客户信息

                }

            }else{
                //  用户不存在, 创建用户信息
                $ai_data['socketid'] = $request['id'];
                $ai_data['aiusername'] = $request['id'];
                $ai_data['create_time'] = time();
                $ai_data['last_time'] = time();
                $save_aiuser = $this->_aiuser_model->save($ai_data);
                if($save_aiuser){
                    // 发送日志记录
                    $logs = ['log'=> $ai_data['socketid'] . '新用户注册成功','create_time'=>time() ];
                    $this->_ailogs_model->save($logs);
                }
                // 发送问候信息
                $msgrules = ['typeid'=>1];
                $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();
                $reply_msg = $msg_reply[0]['msgfirst'];
            }
        }else{
            $reply_msg = '没有用户信息,也没有消息';
        }
        return json($reply_msg);
    }
    // 用户信息采集
    public function talk0915(){
        $reply_msg = '';
        if (Request::instance()->isPost()){
            $request = Request::instance()->post();
            // 1 判断用户是否存在
            $has_socketid = $this->_aiuser_model->where(['socketid'=>$request['id']])->select();
            if($has_socketid){
                // -------------------------- 二次聊天区域 start--------------------------------- //
                // 查询聊天画像采集度 1 判断 用户画像是否存在
                $sure_userinfo = self::check_userinfo($has_socketid[0]['user_id']);

                if($sure_userinfo){
                    // 用户画像存在, 1.1 判断 isclient 是否采集过了,  判断下一个问题的答案

                    $is_client = self::check_status($has_socketid[0]['user_id']);



                    // 判断用户是否回答了  issecond
                    if($is_client[0]['issecond'] == 1){
                        // 已经同意了采集信息, 准备采集年龄 $request['msg']

                        $data = ['age'=>$request['msg']];
                        self::full_userinfo($has_socketid[0]['user_id'],$data);

                        $typeid = 1;
                        $msgtype=0;
                        $reply_array = self::check_reply($typeid,$msgtype);
                        $reply_msg = $reply_array[0]['msgduring'];

                    }elseif($is_client[0]['issecond'] == 2){
                        // 不同意采集信息, 回复不同意采集的回复信息
                        $typeid = 1;
                        $msgtype=-1;
                        $reply_array = self::check_reply($typeid,$msgtype);
                        $reply_msg = $reply_array[0]['msgsecond'];
                    }else{
                        // 还没有采集年龄, 查看是否有采集是否是意向客户
                        // 如果不是意向客户还继续发言的话会采取默认回复 判断用户的isclient
                        if($is_client[0]['isclient'] == 1 ){
                            // 更新采集许可  issecond
                            $data = ['issecond'=>1];
                            self::full_userinfo($has_socketid[0]['user_id'],$data);

                            // 意向用户, 继续问下一个问题  msgage
                            $typeid = 1;
                            $reply_array = self::check_reply($typeid);
                            $reply_msg = $reply_array[0]['msgage'];
                        }elseif($is_client[0]['isclient'] == 2){
                            $reply_msg = '如果不是来咨询的话, 小姐姐没空陪你聊天哟';
                        }else{
                            $reply_msg = '如果不是来咨询的话, 小姐姐没空陪你聊天哟';
                        }

                    }


                }else{
                    // 用户画像不存在, 尚未采集 isclient
                    // 首次回复后的获取聊天数据, 比对聊天反馈
                    $check_answer = self::check_answer($request['msg']);
                    $info_data = [];
                    $info_data['user_id'] =$has_socketid[0]['user_id'];
                    if($check_answer){
                        $info_data['isclient'] = 1;
                        // 找到了对应的回答, 判断是肯定的回答, 就继续返回问问题, 并记录到用户画像里面
                        $typeid = 1;
                        $msgtype=0;
                        $reply_array = self::check_reply($typeid,$msgtype);
                        $reply_msg = $reply_array[0]['msgsecond'];
                    }else{
                        // 找不到对应的回复, 直接回复疑问, 然后继续采集问题
                        $reply_msg = '不是来咨询的, 那你是来撩我的咯';
                        // 写入非意向客户信息
                        $info_data['isclient'] = 2;
                    }
                    // 录入用户的画像
                    $record_userinfo = self::record_client($info_data);
                }

                // 更新用户聊天时间
                $up_chat = self::update_chat_time($has_socketid[0]['user_id']);


                // -------------------------- 二次聊天区域 end--------------------------------- //

            }else{
                //  用户不存在, 创建用户信息
                $ai_data['socketid'] = $request['id'];
                $ai_data['aiusername'] = $request['id'];
                $ai_data['create_time'] = time();
                $ai_data['last_time'] = time();
                $save_aiuser = $this->_aiuser_model->save($ai_data);
                if($save_aiuser){
                    // 发送日志记录
                    $logs = ['log'=> $ai_data['socketid'] . '新用户注册成功','create_time'=>time() ];
                    $this->_ailogs_model->save($logs);
                }
                // 发送问候信息 取用聊天信息
                $msgrules = ['typeid'=>1,'msgtype'=>0];
                $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();
                $reply_msg = $msg_reply[0]['msgfirst'];
            }
        }else{
            $reply_msg = '没有用户信息,也没有消息';
        }
        return json($reply_msg);
    }

// --------------------------------------------------- 以上是备份的方法 end--------------------------------------//

    /*
     * 查看用户数据返回信息
     * */
    public function check_aiuser($answer='是'){
        // 匹配用户回复的前1个字符
        $search_key = ['key'=>$answer,
            'keytarget'=>2];
        // 匹配否定的回答
        $check_answer = $this->_aitalk_model->where($search_key)->select();
        if($check_answer){
            echo '否定的回答';
        }else{
            echo '肯定的回答';
        }
        dump($check_answer);

    }

    public function msg(){
        $msgrules = ['typeid'=>1];
        $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();

        dump($msg_reply[0]['id']);
        // msgfirst
        dump($msg_reply[0]['msgfirst']);
        dump($msg_reply[0]['msgsecond']);
        dump($msg_reply[0]);
    }

    public function logs(){
        $ai_data['socketid'] = 'LC-EscY1h577E2EWAAAC';
        $logs = ['log'=>  $ai_data['socketid'] . '新用户注册成功','create_time'=>time() ];
        $this->_ailogs_model->save($logs);
    }

    public function save_back(){
        $ai_data['socketid'] = 'hhh';
//        $ai_data['aiusername'] =  'hhh';
//        $ai_data['create_time'] = time();
//        $ai_data['last_time'] = time();
//        $save_aiuser = $this->_aiuser_model->save($ai_data);
//        var_dump($save_aiuser);
        // 用id去查询
        $aiuser = $this->_aiuser_model->where(['socketid' => $ai_data['socketid']])->select();
//        var_dump($aiuser);
        print_r($aiuser[0]);
        echo $aiuser[0]['id'];
        echo $aiuser[0]['socketid'];

    }


// 简单校验数据收发
    public function talktest(){
        $request = Request::instance()->post();
        // return json(['code' => -1 , 'error' => 'mobile num wrong']);
        return json(['data'=> $request,
                'id' => $request['id'],
            'msg' => $request['msg']
        ]);
    }

    // 用户信息采集 get 并存
    public function talks(){
        // post  id->socketid  msg
        $reply_msg = '';
        if (Request::instance()->isPost()){
            $request = Request::instance()->post();
            // 1 判断id是否存在  ->where(['id'=>$id])->select();
            $has_socketid = $this->_aiuser_model->where(['socketid'=>$request['id']])->select();
            $ai_data = [];
            if($has_socketid){
                // 用户已经存在,调用存在的用户数据
                $ai_data['last_time'] = time();
                $reply_msg = '老用户登录成功';
                // 查询聊天数据, 最近的一次聊天时间 和 最开始的聊天时间


            }else{
                //  用户不存在, 创建用户信息
                $ai_data['socketid'] = $request['id'];
                $ai_data['aiusername'] = $request['id'];
                $ai_data['create_time'] = time();
                $ai_data['last_time'] = time();
                $save_aiuser = $this->_aiuser_model->save($ai_data);
                if($save_aiuser){
                    // 发送日志记录
                    $logs = ['log'=> $ai_data['socketid'] . '新用户注册成功','create_time'=>time() ];
                    $this->_ailogs_model->save($logs);
                }
                // 发送问候信息
                $msgrules = ['typeid'=>1];
                $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();
                $reply_msg = $msg_reply[0]['msgfirst'];
            }
        }else{
//            $reply_msg = '没有用户信息,也没有消息';
            $request = Request::instance()->get();
            // 1 判断id是否存在  ->where(['id'=>$id])->select();
            $has_socketid = $this->_aiuser_model->where(['socketid'=>$request['id']])->select();
            $ai_data = [];
            if($has_socketid){
                // 用户已经存在,调用存在的用户数据
                $ai_data['last_time'] = time();
                $reply_msg = '老用户登录成功';
                // 查询聊天数据, 最近的一次聊天时间 和 最开始的聊天时间


            }else{
                //  用户不存在, 创建用户信息
                $ai_data['socketid'] = $request['id'];
                $ai_data['aiusername'] = $request['id'];
                $ai_data['create_time'] = time();
                $ai_data['last_time'] = time();
                $save_aiuser = $this->_aiuser_model->save($ai_data);
                if($save_aiuser){
                    // 发送日志记录
                    $logs = ['log'=> $ai_data['socketid'] . '新用户注册成功','create_time'=>time() ];
                    $this->_ailogs_model->save($logs);
                }
                // 发送问候信息
                $msgrules = ['typeid'=>1];
                $msg_reply =  $this->_aimsgrules_model->where($msgrules)->select();
                $reply_msg = $msg_reply[0]['msgfirst'];
            }
        }
//        return json($reply_msg);
        var_dump($reply_msg);
    }

    // 1 校验用户登录接口
    public function talklogin(){
        // post  id->socketid  msg
        $reply_msg = '';
        if (Request::instance()->isPost()){
            $request = Request::instance()->post();
            // 1 判断id是否存在  ->where(['id'=>$id])->select();
            $has_socketid = $this->_aiuser_model->where(['socketid'=>$request['id']])->select();
            $ai_data = [];

            if($has_socketid){
                // 用户已经存在,调用存在的用户数据
                $ai_data['last_time'] = time();
                $reply_msg = '老用户登录成功';
            }else{
                //  用户不存在, 创建用户信息
                $ai_data['socketid'] = $request['id'];
                $ai_data['aiusername'] = $request['id'];
                $ai_data['create_time'] = time();
                $ai_data['last_time'] = time();
                $save_aiuser = $this->_aiuser_model->save($ai_data);
                if($save_aiuser){
                    $reply_msg = '新用户注册成功';
                }
            }
        }else{
            $reply_msg = '没有用户信息,也没有消息';
        }
        return json($reply_msg);
    }



}